/**
 * 数据模型定义
 * 规范JSON数据结构，便于前端存储和管理
 */

// 用户信息模型
const UserModel = {
  openid: '',           // 微信openid
  nickName: '',         // 昵称
  avatarUrl: '',        // 头像URL
  gender: 0,            // 性别 0-未知 1-男 2-女
  account: '',          // 账号
  createTime: '',       // 创建时间
  lastLoginTime: ''     // 最后登录时间
};

// 比赛信息模型
const RaceModel = {
  id: '',               // 比赛ID
  title: '',            // 比赛标题
  dateStr: '',          // 日期字符串
  location: '',         // 地点
  status: '',           // 状态：报名中/进行中/已结束
  creator: null,        // 创建者信息
  createdAt: '',        // 创建时间
  courtCount: 1,        // 场地数量
  maxPlayers: 16,       // 最大人数
  type: 'round',        // 比赛类型：round-轮转赛 fixed-固搭赛
  description: '',      // 比赛描述
  rules: '',            // 比赛规则
  prize: '',            // 奖品设置
  signupList: [],       // 报名列表
  gameList: []          // 比赛轮次列表
};

// 报名信息模型
const SignupModel = {
  id: '',               // 报名ID
  raceId: '',           // 比赛ID
  userInfo: null,       // 用户信息
  order: 0,             // 报名顺序
  status: 'confirmed',  // 状态：confirmed-已确认 pending-待确认 cancelled-已取消
  createTime: '',       // 报名时间
  notes: ''             // 备注信息
};

// 比赛轮次模型
const GameModel = {
  id: '',               // 轮次ID
  raceId: '',           // 比赛ID
  round: 1,             // 轮次号
  courtIndex: 1,        // 场地编号
  status: 'pending',    // 状态：pending-待开始 playing-进行中 finished-已结束
  leftPlayers: [],      // 左队球员
  rightPlayers: [],     // 右队球员
  scoreLeft: 0,         // 左队得分
  scoreRight: 0,        // 右队得分
  startTime: '',        // 开始时间
  endTime: '',          // 结束时间
  winner: '',           // 获胜方：left/right
  notes: ''             // 备注
};

// 设置模型
const SettingsModel = {
  autoBackup: true,     // 自动备份到云端
  backupInterval: 24,   // 备份间隔（小时）
  maxLocalStorage: 10,  // 最大本地存储（MB）
  theme: 'light',       // 主题：light/dark
  language: 'zh-CN',    // 语言
  notifications: true,  // 通知开关
  soundEnabled: true,   // 声音开关
  lastBackupTime: ''    // 最后备份时间
};

// 数据验证函数
const DataValidator = {
  /**
   * 验证用户信息
   * @param {object} userInfo 用户信息
   * @returns {boolean} 是否有效
   */
  validateUser(userInfo) {
    return userInfo && 
           typeof userInfo.openid === 'string' && 
           userInfo.openid.length > 0;
  },

  /**
   * 验证比赛信息
   * @param {object} race 比赛信息
   * @returns {boolean} 是否有效
   */
  validateRace(race) {
    return race && 
           typeof race.title === 'string' && 
           race.title.length > 0 &&
           typeof race.id === 'string';
  },

  /**
   * 验证报名信息
   * @param {object} signup 报名信息
   * @returns {boolean} 是否有效
   */
  validateSignup(signup) {
    return signup && 
           typeof signup.raceId === 'string' && 
           signup.raceId.length > 0 &&
           signup.userInfo;
  },

  /**
   * 验证比赛轮次
   * @param {object} game 比赛轮次
   * @returns {boolean} 是否有效
   */
  validateGame(game) {
    return game && 
           typeof game.raceId === 'string' && 
           game.raceId.length > 0 &&
           Array.isArray(game.leftPlayers) &&
           Array.isArray(game.rightPlayers);
  }
};

// 数据转换函数
const DataConverter = {
  /**
   * 云端数据转本地数据
   * @param {object} cloudData 云端数据
   * @returns {object} 本地数据
   */
  cloudToLocal(cloudData) {
    return {
      ...cloudData,
      _id: cloudData._id || cloudData.id,
      createTime: cloudData.createTime || cloudData.createdAt
    };
  },

  /**
   * 本地数据转云端数据
   * @param {object} localData 本地数据
   * @returns {object} 云端数据
   */
  localToCloud(localData) {
    return {
      ...localData,
      id: localData._id || localData.id,
      createdAt: localData.createTime || localData.createdAt
    };
  }
};

// 导出模块
module.exports = {
  UserModel,
  RaceModel,
  SignupModel,
  GameModel,
  SettingsModel,
  DataValidator,
  DataConverter
}; 